diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php
index df19dba..0ba483f 100644
--- a/system/database/drivers/sqlite/sqlite_driver.php
+++ b/system/database/drivers/sqlite/sqlite_driver.php
@@ -33,6 +33,9 @@
 class CI_DB_sqlite_driver extends CI_DB {
 
 	var $dbdriver = 'sqlite';
+	
+	// The character used to escape with - not needed for SQLite
+	var $_escape_char = '';
 
 	/**
 	 * The syntax to count rows is slightly different across different
@@ -300,7 +303,7 @@
 		if ($table == '')
 			return '0';
 	
-		$query = $this->query($this->_count_string . $this->_protect_identifiers('numrows'). " FROM " . $this->_protect_identifiers($this->dbprefix.$table));
+		$query = $this->query($this->_count_string . $this->_protect_identifiers('numrows'). " FROM " . $this->_protect_identifiers($table, TRUE, NULL, FALSE));
 		
 		if ($query->num_rows() == 0)
 			return '0';
@@ -361,7 +364,7 @@
 	 */
 	function _field_data($table)
 	{
-		return "SELECT * FROM ".$this->_escape_table($table)." LIMIT 1";
+		return "SELECT * FROM ".$table." LIMIT 1";
 	}
 
 	// --------------------------------------------------------------------
@@ -393,97 +396,32 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Escape Column Name
+	 * Escape the SQL Identifiers
 	 *
-	 * This function adds backticks around supplied column name
+	 * This function escapes column and table names
 	 *
 	 * @access	private
-	 * @param	string	the column name
+	 * @param	string
 	 * @return	string
 	 */
-	function _escape_column($column)
+	function _escape_identifiers($item)
 	{
-		// Not necessary with SQLite so we simply return the value
-		return $column;
-	}
-			
-	// --------------------------------------------------------------------
-
-	/**
-	 * Escape Table Name
-	 *
-	 * This function adds backticks if the table name has a period
-	 * in it. Some DBs will get cranky unless periods are escaped
-	 *
-	 * @access	private
-	 * @param	string	the table name
-	 * @return	string
-	 */
-	function _escape_table($table)
-	{
-		// other database drivers use this to add backticks, hence this
-		// function is simply going to return the tablename for sqlite		
-		return $table;
-	}
-		
-	// --------------------------------------------------------------------
-
-	/**
-	 * Protect Identifiers
-	 *
-	 * This function adds backticks if appropriate based on db type
-	 *
-	 * @access	private
-	 * @param	mixed	the item to escape
-	 * @param	boolean	only affect the first word
-	 * @return	mixed	the item with backticks
-	 */
-	function _protect_identifiers($item, $first_word_only = FALSE)
-	{
-		if (is_array($item))
+		if ($this->_escape_char == '')
 		{
-			$escaped_array = array();
-
-			foreach($item as $k=>$v)
-			{
-				$escaped_array[$this->_protect_identifiers($k)] = $this->_protect_identifiers($v, $first_word_only);
-			}
-
-			return $escaped_array;
-		}	
-
-		// This function may get "item1 item2" as a string, and so
-		// we may need "item1 item2" and not "item1 item2"
-		if (ctype_alnum($item) === FALSE)
+			return $item;
+		}
+	
+		if (strpos($item, '.') !== FALSE)
 		{
-			if (strpos($item, '.') !== FALSE)
-			{
-				$aliased_tables = implode(".",$this->ar_aliased_tables).'.';
-				$table_name =  substr($item, 0, strpos($item, '.')+1);
-				$item = (strpos($aliased_tables, $table_name) !== FALSE) ? $item = $item : $this->dbprefix.$item;
-			}
-
-			// This function may get "field >= 1", and need it to return "field >= 1"
-			$lbound = ($first_word_only === TRUE) ? '' : '|\s|\(';
-
-			$item = preg_replace('/(^'.$lbound.')([\w\d\-\_]+?)(\s|\)|$)/iS', '$1$2$3', $item);
+			$str = $this->_escape_char.str_replace('.', $this->_escape_char.'.'.$this->_escape_char, $item).$this->_escape_char;			
 		}
 		else
 		{
-			return "{$item}";
+			$str = $this->_escape_char.$item.$this->_escape_char;
 		}
-
-		$exceptions = array('AS', '/', '-', '%', '+', '*', 'OR', 'IS');
 		
-		foreach ($exceptions as $exception)
-		{
-		
-			if (stristr($item, " {$exception} ") !== FALSE)
-			{
-				$item = preg_replace('/ ('.preg_quote($exception).') /i', ' $1 ', $item);
-			}
-		}
-		return $item;
+		// remove duplicates if the user already included the escape
+		return preg_replace('/['.$this->_escape_char.']+/', $this->_escape_char, $str);
 	}
 			
 	// --------------------------------------------------------------------
@@ -523,7 +461,7 @@
 	 */
 	function _insert($table, $keys, $values)
 	{	
-		return "INSERT INTO ".$this->_escape_table($table)." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
+		return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
 	
 	// --------------------------------------------------------------------
@@ -552,8 +490,10 @@
 		
 		$orderby = (count($orderby) >= 1)?' ORDER BY '.implode(", ", $orderby):'';
 	
-		$sql = "UPDATE ".$this->_escape_table($table)." SET ".implode(', ', $valstr);
+		$sql = "UPDATE ".$table." SET ".implode(', ', $valstr);
+
 		$sql .= ($where != '' AND count($where) >=1) ? " WHERE ".implode(" ", $where) : '';
+
 		$sql .= $orderby.$limit;
 		
 		return $sql;
diff --git a/system/database/drivers/sqlite/sqlite_forge.php b/system/database/drivers/sqlite/sqlite_forge.php
index 631c9c7..2039525 100644
--- a/system/database/drivers/sqlite/sqlite_forge.php
+++ b/system/database/drivers/sqlite/sqlite_forge.php
@@ -82,7 +82,7 @@
 			$sql .= 'IF NOT EXISTS ';
 		}
 		
-		$sql .= $this->db->_escape_table($table)."(";
+		$sql .= $this->db->_escape_identifiers($table)."(";
 		$current_field_count = 0;
 
 		foreach ($fields as $field=>$attributes)
diff --git a/system/database/drivers/sqlite/sqlite_result.php b/system/database/drivers/sqlite/sqlite_result.php
index 9fbd725..735a073 100644
--- a/system/database/drivers/sqlite/sqlite_result.php
+++ b/system/database/drivers/sqlite/sqlite_result.php
@@ -71,12 +71,6 @@
 		return $field_names;
 	}
 
-	// Deprecated
-	function field_names()
-	{
-		return $this->list_fields();
-	}
-
 	// --------------------------------------------------------------------
 
 	/**
